cannot open compressed file 'figures/ratemcrA.plot', probable reason 'No such file or directory'Error in gzfile(file, "rb") : cannot open the connection

Update

It’s been a while, and lately I’ve been working in R to create reproducible data analyses. I’ve also uploaded this data to my Github page. This repository is private, but (fingers crossed) upon publication, I can set it to public so that anyone who wants to reproduce this work or make similar figures can look at the code, import the data, and easily do so. (Does this sound good?)

Besides this, the only difference in the data is that I’ve used a different algorithm, dada2, to infer microbial “species”. Instead of OTUs (Operational Taxonomic Units) that represent somewhat arbitrary clusterings of sequences that are 97% similar to one another, these ASVs (Amplicon Sequence Variants) are exact sequence variants whose errors during sequencing have been identified and corrected using a machine-learning denoising algorithm. This has an impact on the number of unique sequences I end up with: originally I got 24,000 OTUs, but after reprocessing the data, I now end up with 16,000 ASVs. However it doesn’t really change the big picture much.

Soon I’ll send out a google drive link where we can all edit the most recent version of the manuscript. I remember we discussed having a separate text section for the supplementals where a lot of the model assumptions and justifications could be explained in adequate detail.

(As a side note, I discovered Zotero integrates with Google docs now. You can even import Word docs with Zotero citations into Google docs and they will convert usually without much hassle. Personally, now I don’t see any reason to use Word anymore).

Anyway, here is the latest version of all the figures:

The map is unchanged:

Figure 1. Bathymetric map of Storfjordrenna gas hydrate mounds and modeling approach. (A) Storfjordrenna is located south of the Svalbard Archipelago. Locations of cores and gas hydrate mounds (GHMs) are shown. White polygons indicate areas of seafloor gas release observed at the time of the cruise. All cores were collected from GHMs, with the exception of the reference core GC1048, which was sampled 400 m west of GHM5. The schematic in (B) depicts sulfate and methane concentrations throughout a sediment column at a steady-state condition. As methane flux increases, (C), SR-AOM is stimulated at shallower depths and sulfate profiles show a concave-up curvature. After decades of steadily increasing methane flux at a particular area, (D), diffusion modeling can be used to estimate how quickly the methane front traveled the distance between the current and prior sulfate depletion depths (indicated by the orange bracket).

Figure 1. Bathymetric map of Storfjordrenna gas hydrate mounds and modeling approach. (A) Storfjordrenna is located south of the Svalbard Archipelago. Locations of cores and gas hydrate mounds (GHMs) are shown. White polygons indicate areas of seafloor gas release observed at the time of the cruise. All cores were collected from GHMs, with the exception of the reference core GC1048, which was sampled 400 m west of GHM5. The schematic in (B) depicts sulfate and methane concentrations throughout a sediment column at a steady-state condition. As methane flux increases, (C), SR-AOM is stimulated at shallower depths and sulfate profiles show a concave-up curvature. After decades of steadily increasing methane flux at a particular area, (D), diffusion modeling can be used to estimate how quickly the methane front traveled the distance between the current and prior sulfate depletion depths (indicated by the orange bracket).

Panel figures

The only change I’ve made is that I’ve subset ANME and SRB as their own panels in the bubble plots, because their taxonomic categories are different.

Here’s the porewater, modeled rate, microbial community, and gene count data from the seep (core PC1029):

Figure 2. Geochemical, numerical, microbial community, and gene abundance data from an active seep site. Push core PC1029 is located at the seep in the center of GHM3. (A) shows porewater sulfate, sulfide, and alkalinity, and (B) present-day modeled AOM rates. (C) depicts percent abundances of dominant bacterial and archaeal classes within the microbial community (left panel), dominant anaerobic methanotrophic archaeal (ANME) families (center panel) and sulfate-reducing bacterial (SRB) genera (right panel). (D) shows copy numbers of mcrA and dsrAB genes per gram bulk sediment, with values below the detectable limit (10^3 g-1) indicated by X’s. Gas hydrate nodules several cm in diameter (A) were recovered in a replicate core at 40-50 cm below seafloor.

And from cores where methane flux is increasing (GC1045 and GC1081):

Figure 3. Geochemical, numerical, microbial community, and gene abundance data from two sites showing non-steady-state sulfate-methane dynamics. Gravity cores GC1045 and GC1081 are located at GHMs 3 and 4, respectively. Sulfate-methane transition depths are indicated by dashed lines. (A) shows porewater sulfate, sulfide, and alkalinity, and (B) the temporal progression of modeled AOM rates from 10 years ago to up to 2 years into the future. (C) indicates percent abundances of dominant bacterial and archaeal classes, dominant anaerobic methanotrophic archaeal (ANME) familes, and sulfate-reducing bacterial (SRB) genera. (D) shows copy numbers of mcrA and dsrAB genes per gram bulk sediment.

And from four steady-state cores:

Figure 4. Geochemical, numerical, microbial community, and gene abundance data from four sites showing steady-state sulfate-methane dynamics. GC1068–1070 are from GHM5, and reference core GC1048 is located to the west of GHM5. Sulfate-methane transition depths are indicated by dashed lines. (A) shows porewater sulfate, sulfide, and alkalinity, and (B) present-day modeled AOM rates. (C) indicates percent abundances of dominant bacterial and archaeal classes, dominant anaerobic methanotrophic archaeal (ANME) familes, and sulfate-reducing bacterial (SRB) genera.(D) shows copy numbers of mcrA and dsrAB genes per gram bulk sediment, with values below the detectable limit (103 g-1) indicated by X’s. Macroscopic translucent-to-yellow biofilms, shown as yellow symbols in panel (A), were observed at SMT depths in two cores (symbol size not to scale with depth axis).

Differentially abundant ASVs across zones and methane flux types:

This plot shows differentially abundant ASVs, replacing the old figure S2. Each point represents a highly-abundant ASV (one of the top 1000 in the dataset) whose relative abundance is different between steady-state or non-steady-state communities. This is further subset into above-SMT and below-SMT communities (A and B vertical panels). I see similar patterns as in the previous figure S2. But interestingly, the ANME-1a on the right side of panel B is not actually one of the two major ANME-1a ASVs in the dataset– those two are not differentially abundant. So this might hint at ASV-scale niche differences in this subpopulation that would otherwise be undetected with OTUs.

Figure 5. Common ASVs (the top 1000 in this dataset) that are differentially abundant between sites where methane flux is increasing (non-steady-state) and sites at geochemical steady-state, facetted horizontally on the right by communities from above (A) or below (B) the sulfate-methane transition zone. Alpha=0.01, with a Benjamini-Hochberg correction for multiple comparisons. Panel (A) shows ASVs colored by Class, with Methanomicrobia and Deltaproteobacteria shown in further detail in panels (B) and (C) and colored by Order and Family, respectively.

Alpha-diversity (diversity within communities)

Even though community richness has changed because of processing ASVs instead of OTUs, the alpha-diversity patterns (factoring in evenness) are unchanged. Communities from non-steady-state sites show decreasing alpha diversity across the peak AOM rate, whereas steady-state communities are unchanged.

Figure 6. Microbial community diversity patterns across peak modeled AOM depths. Shannon diversity indices of microbial communities for individual samples plotted by their distance above (positive) or below (negative) the depths corresponding to present-day maximum AOM rates across all cores. Cores are divided by panel based on whether sulfate-methane dynamics are (A) non-steady-state, or (B) at steady-state. Dotted horizontal lines show the distance interval corresponding to samples from non-steady-state cores. Multiple R2 and slope p-values are shown for linear regressions of points within these intervals. These analyses suggest microbial community diversity correlates better with the peak AOM depth in non-steady-state cores than in the others.

Beta-diversity (diversity between communities)

I didn’t get any ordinations to work on this dataset before, but I’ve tried several on the recent dataset using several combinations of transformations, distance metrics, and ordinations. NMDS with unweighted Unifrac works well here. Pairwise comparisons between all core types (steady-state or non-steady-state) and redox zones shows that every community category is different. (This is not what I found earlier, where below-SMT communities were not different between non-steady-state and steady-state sites… and nonlinear SR zone communities were not different from below-SMT ones in non-steady-state sites). This ordination below (and mentioning a few t-tests in the text) will replace the old Figure 6.

Figure 7. Nonmetric Multidimensional Scaling (NMDS) ordination of unweighted Unifrac distances between all communities. Distances were calculated based on a variance-stabilizing log transformation with negative values removed. Pairwise t-tests verify that community structure is distinct among all redox zones. This remains true even when separating communities from steady-state and non-steady-state sites, and when comparing analogous redox zones between steady-state and non-steady-state sites (will discuss this more in the text).

Conceptual figure is unchanged:

caption

caption

Figure 8. Conceptual depiction of microbial community changes concurrent with evolving methane supply at Storfjordrenna GHMs. Methane and sulfate profiles are shown in gray and blue lines, respectively, with microbial community changes indicated by blowup circles. ANME and SRB represent red and green circles, with all other bacteria and archaea in gray (cell shapes represent diversity of other taxa). (A) Gas hydrates at the upper limit of stability dissociate and aqueous methane diffuses upwards, stimulating AOM and drawing down sulfate while some of the methane escapes as bubbles of free gas. (B) Once sulfate drops below 1 mM, microbial diversity, rates of AOM, and the thickness of the AOM zone decrease. Non-steady-state conditions are still observed in sulfate-methane dynamics. (C) By the time a steady-state sulfate profile is reached, methane flux is no longer increasing. Gas seepage has stopped, microbial diversity rebounds, and the AOM zone is constrained to a thinner depth, but peak AOM rates are higher and can support the growth of macroscopic biofilms.

Supplemental Figures

These remain unchanged.

Figure S1. Present-day upwards methane flux integrated from modeled AOM rates at all cores. Because sulfate did not drop to 0 mM in PC1029, the amount shown here represents a lower boundary.

Figure S2. Regression of mcrA gene copy numbers (per gram bulk sediment) to modeled AOM rates shows a linear relationship across samples from all cores (log-log transformation). Samples that did not contain detectable mcrA were not included.

Figure S3. Empirically-measured sulfate porewater profiles from cores taken from steady-state areas, shown with modeled sulfate profiles assuming a non-steady state scenario where methane flux is increasing. The discrepancies in the shapes of these two profiles for these four cores is evidence that they are not experiencing a recent increase in methane flux, and are thus characterized as steady-state.

Supplemental Tables

These are also unchanged.

Table S1. Latitude, longitude, water depth, core recovery, and sulfate-methane transition depth of all cores analyzed in this study.

Table S2. Increases in methane flux over the past two decades for cores GC1045 and GC1081 and corresponding depths of modeled peak AOM rates. Fluxes are integrated from AOM rate data, using cell widths of 2.5 cm. (Peak AOM depths also at 2.5 cm resolution).

LS0tCnRpdGxlOiAiU3RvcmZqb3JkcmVubmEgTWFudXNjcmlwdCAtLSBVcGRhdGVkIEZpZ3VyZXMiCmF1dGhvcjogIlNjb3R0IEtsYXNlayIKZGF0ZTogIjItMTctMjAiCm91dHB1dDogZ2l0aHViX2RvY3VtZW50Ci0tLQpgYGB7ciwgZWNobz1GQUxTRX0KIyB0aGlzIGNodW5rIGltcG9ydHMgZmlndXJlcyB0aGF0IGhhdmUgYmVlbiBleHBvcnRlZCBmcm9tIHNlcXVlbmNlX3Byb2Nlc3NpbmcuUm1kIGludG8gL2ZpZ3VyZXMKZmlndXJlMiA8LSByZWFkUkRTKGZpbGUgPSAiZmlndXJlcy9maWd1cmUyIikgCmZpZ3VyZTMgPC0gcmVhZFJEUyhmaWxlID0gImZpZ3VyZXMvZmlndXJlMyIpIApmaWd1cmU0IDwtIHJlYWRSRFMoZmlsZSA9ICJmaWd1cmVzL2ZpZ3VyZTQiKSAKZmlndXJlNSA8LSByZWFkUkRTKGZpbGUgPSAiZmlndXJlcy9maWd1cmU1IikKbm1kc29yZDEgPC0gcmVhZFJEUyhmaWxlID0gImZpZ3VyZXMvbm1kc29yZDEiKQpkaWZmYWJ1bmQgPC0gcmVhZFJEUyhmaWxlID0gImZpZ3VyZXMvZGlmZmFidW5kIikKY29yZWZsdXguZmlnIDwtIHJlYWRSRFMoZmlsZSA9ICJmaWd1cmVzL2NvcmVmbHV4LmZpZyIpCnJhdGVtY3JBLnBsb3QgPC0gcmVhZFJEUyhmaWxlID0gImZpZ3VyZXMvcmF0ZW1jckEucGxvdCIpCnNzanAucGxvdCA8LSByZWFkUkRTKGZpbGUgPSAiZmlndXJlcy9zc2pwLnBsb3QiKQpjb3JlaW5mbyA8LSByZWFkUkRTKGZpbGUgPSAiZmlndXJlcy9jb3JlaW5mbyIpCmluYy5jb3JlIDwtIHJlYWRSRFMoZmlsZSA9ICJmaWd1cmVzL2luYy5jb3JlIikKYGBgCgojIyMgVXBkYXRlCgpJdCdzIGJlZW4gYSB3aGlsZSwgYW5kIGxhdGVseSBJJ3ZlIGJlZW4gd29ya2luZyBpbiBSIHRvIGNyZWF0ZSByZXByb2R1Y2libGUgZGF0YSBhbmFseXNlcy4gSSd2ZSBhbHNvIHVwbG9hZGVkIHRoaXMgZGF0YSB0byBteSBHaXRodWIgcGFnZS4gVGhpcyByZXBvc2l0b3J5IGlzIHByaXZhdGUsIGJ1dCAoZmluZ2VycyBjcm9zc2VkKSB1cG9uIHB1YmxpY2F0aW9uLCBJIGNhbiBzZXQgaXQgdG8gcHVibGljIHNvIHRoYXQgYW55b25lIHdobyB3YW50cyB0byByZXByb2R1Y2UgdGhpcyB3b3JrIG9yIG1ha2Ugc2ltaWxhciBmaWd1cmVzIGNhbiBsb29rIGF0IHRoZSBjb2RlLCBpbXBvcnQgdGhlIGRhdGEsIGFuZCBlYXNpbHkgZG8gc28uIChEb2VzIHRoaXMgc291bmQgZ29vZD8pCgpCZXNpZGVzIHRoaXMsIHRoZSBvbmx5IGRpZmZlcmVuY2UgaW4gdGhlIGRhdGEgaXMgdGhhdCBJJ3ZlIHVzZWQgYSBbZGlmZmVyZW50IGFsZ29yaXRobSwgZGFkYTJdKGh0dHBzOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvbm1ldGguMzg2OSksIHRvIGluZmVyIG1pY3JvYmlhbCAic3BlY2llcyIuIEluc3RlYWQgb2YgT1RVcyAoT3BlcmF0aW9uYWwgVGF4b25vbWljIFVuaXRzKSB0aGF0IHJlcHJlc2VudCBzb21ld2hhdCBhcmJpdHJhcnkgY2x1c3RlcmluZ3Mgb2Ygc2VxdWVuY2VzIHRoYXQgYXJlIDk3JSBzaW1pbGFyIHRvIG9uZSBhbm90aGVyLCB0aGVzZSBBU1ZzIChBbXBsaWNvbiBTZXF1ZW5jZSBWYXJpYW50cykgYXJlIGV4YWN0IHNlcXVlbmNlIHZhcmlhbnRzIHdob3NlIGVycm9ycyBkdXJpbmcgc2VxdWVuY2luZyBoYXZlIGJlZW4gaWRlbnRpZmllZCBhbmQgY29ycmVjdGVkIHVzaW5nIGEgbWFjaGluZS1sZWFybmluZyBkZW5vaXNpbmcgYWxnb3JpdGhtLiBUaGlzIGhhcyBhbiBpbXBhY3Qgb24gdGhlIG51bWJlciBvZiB1bmlxdWUgc2VxdWVuY2VzIEkgZW5kIHVwIHdpdGg6IG9yaWdpbmFsbHkgSSBnb3QgMjQsMDAwIE9UVXMsIGJ1dCBhZnRlciByZXByb2Nlc3NpbmcgdGhlIGRhdGEsIEkgbm93IGVuZCB1cCB3aXRoIDE2LDAwMCBBU1ZzLiBIb3dldmVyIGl0IGRvZXNuJ3QgcmVhbGx5IGNoYW5nZSB0aGUgYmlnIHBpY3R1cmUgbXVjaC4KClNvb24gSSdsbCBzZW5kIG91dCBhIGdvb2dsZSBkcml2ZSBsaW5rIHdoZXJlIHdlIGNhbiBhbGwgZWRpdCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGUgbWFudXNjcmlwdC4gSSByZW1lbWJlciB3ZSBkaXNjdXNzZWQgaGF2aW5nIGEgc2VwYXJhdGUgdGV4dCBzZWN0aW9uIGZvciB0aGUgc3VwcGxlbWVudGFscyB3aGVyZSBhIGxvdCBvZiB0aGUgbW9kZWwgYXNzdW1wdGlvbnMgYW5kIGp1c3RpZmljYXRpb25zIGNvdWxkIGJlIGV4cGxhaW5lZCBpbiBhZGVxdWF0ZSBkZXRhaWwuIAoKKEFzIGEgc2lkZSBub3RlLCBJIGRpc2NvdmVyZWQgWm90ZXJvIGludGVncmF0ZXMgd2l0aCBHb29nbGUgZG9jcyBub3cuIFlvdSBjYW4gZXZlbiBpbXBvcnQgV29yZCBkb2NzIHdpdGggWm90ZXJvIGNpdGF0aW9ucyBpbnRvIEdvb2dsZSBkb2NzIGFuZCB0aGV5IHdpbGwgY29udmVydCB1c3VhbGx5IHdpdGhvdXQgbXVjaCBoYXNzbGUuIFBlcnNvbmFsbHksIG5vdyBJIGRvbid0IHNlZSBhbnkgcmVhc29uIHRvIHVzZSBXb3JkIGFueW1vcmUpLgoKQW55d2F5LCBoZXJlIGlzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBhbGwgdGhlIGZpZ3VyZXM6CgojIyMgVGhlIG1hcCBpcyB1bmNoYW5nZWQ6CgohW0ZpZ3VyZSAxLiBCYXRoeW1ldHJpYyBtYXAgb2YgU3RvcmZqb3JkcmVubmEgZ2FzIGh5ZHJhdGUgbW91bmRzIGFuZCBtb2RlbGluZyBhcHByb2FjaC4gKEEpIFN0b3Jmam9yZHJlbm5hIGlzIGxvY2F0ZWQgc291dGggb2YgdGhlIFN2YWxiYXJkIEFyY2hpcGVsYWdvLiBMb2NhdGlvbnMgb2YgY29yZXMgYW5kIGdhcyBoeWRyYXRlIG1vdW5kcyAoR0hNcykgYXJlIHNob3duLiBXaGl0ZSBwb2x5Z29ucyBpbmRpY2F0ZSBhcmVhcyBvZiBzZWFmbG9vciBnYXMgcmVsZWFzZSBvYnNlcnZlZCBhdCB0aGUgdGltZSBvZiB0aGUgY3J1aXNlLiBBbGwgY29yZXMgd2VyZSBjb2xsZWN0ZWQgZnJvbSBHSE1zLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHJlZmVyZW5jZSBjb3JlIEdDMTA0OCwgd2hpY2ggd2FzIHNhbXBsZWQgNDAwIG0gd2VzdCBvZiBHSE01LiBUaGUgc2NoZW1hdGljIGluIChCKSBkZXBpY3RzIHN1bGZhdGUgYW5kIG1ldGhhbmUgY29uY2VudHJhdGlvbnMgdGhyb3VnaG91dCBhIHNlZGltZW50IGNvbHVtbiBhdCBhIHN0ZWFkeS1zdGF0ZSBjb25kaXRpb24uIEFzIG1ldGhhbmUgZmx1eCBpbmNyZWFzZXMsIChDKSwgU1ItQU9NIGlzIHN0aW11bGF0ZWQgYXQgc2hhbGxvd2VyIGRlcHRocyBhbmQgc3VsZmF0ZSBwcm9maWxlcyBzaG93IGEgY29uY2F2ZS11cCBjdXJ2YXR1cmUuIEFmdGVyIGRlY2FkZXMgb2Ygc3RlYWRpbHkgaW5jcmVhc2luZyBtZXRoYW5lIGZsdXggYXQgYSBwYXJ0aWN1bGFyIGFyZWEsIChEKSwgZGlmZnVzaW9uIG1vZGVsaW5nIGNhbiBiZSB1c2VkIHRvIGVzdGltYXRlIGhvdyBxdWlja2x5IHRoZSBtZXRoYW5lIGZyb250IHRyYXZlbGVkIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBwcmlvciBzdWxmYXRlIGRlcGxldGlvbiBkZXB0aHMgKGluZGljYXRlZCBieSB0aGUgb3JhbmdlIGJyYWNrZXQpLl0oZmlndXJlcy9GMS5wbmcpCgojIyMgUGFuZWwgZmlndXJlcwoKVGhlIG9ubHkgY2hhbmdlIEkndmUgbWFkZSBpcyB0aGF0IEkndmUgc3Vic2V0IEFOTUUgYW5kIFNSQiBhcyB0aGVpciBvd24gcGFuZWxzIGluIHRoZSBidWJibGUgcGxvdHMsIGJlY2F1c2UgdGhlaXIgdGF4b25vbWljIGNhdGVnb3JpZXMgYXJlIGRpZmZlcmVudC4KCkhlcmUncyB0aGUgcG9yZXdhdGVyLCBtb2RlbGVkIHJhdGUsIG1pY3JvYmlhbCBjb21tdW5pdHksIGFuZCBnZW5lIGNvdW50IGRhdGEgZnJvbSB0aGUgc2VlcCAoY29yZSBQQzEwMjkpOgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NC41LCBmaWcud2lkdGg9MTEsIGZpZy5hbGlnbj0iY2VudGVyIn0KZ3JpZDo6Z3JpZC5kcmF3KGZpZ3VyZTIpCmBgYAoKRmlndXJlIDIuIEdlb2NoZW1pY2FsLCBudW1lcmljYWwsIG1pY3JvYmlhbCBjb21tdW5pdHksIGFuZCBnZW5lIGFidW5kYW5jZSBkYXRhIGZyb20gYW4gYWN0aXZlIHNlZXAgc2l0ZS4gUHVzaCBjb3JlIFBDMTAyOSBpcyBsb2NhdGVkIGF0IHRoZSBzZWVwIGluIHRoZSBjZW50ZXIgb2YgR0hNMy4gKEEpIHNob3dzIHBvcmV3YXRlciBzdWxmYXRlLCBzdWxmaWRlLCBhbmQgYWxrYWxpbml0eSwgYW5kIChCKSBwcmVzZW50LWRheSBtb2RlbGVkIEFPTSByYXRlcy4gKEMpIGRlcGljdHMgcGVyY2VudCBhYnVuZGFuY2VzIG9mIGRvbWluYW50IGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY2xhc3NlcyB3aXRoaW4gdGhlIG1pY3JvYmlhbCBjb21tdW5pdHkgKGxlZnQgcGFuZWwpLCBkb21pbmFudCBhbmFlcm9iaWMgbWV0aGFub3Ryb3BoaWMgYXJjaGFlYWwgKEFOTUUpIGZhbWlsaWVzIChjZW50ZXIgcGFuZWwpIGFuZCBzdWxmYXRlLXJlZHVjaW5nIGJhY3RlcmlhbCAoU1JCKSBnZW5lcmEgKHJpZ2h0IHBhbmVsKS4gKEQpIHNob3dzIGNvcHkgbnVtYmVycyBvZiBtY3JBIGFuZCBkc3JBQiBnZW5lcyBwZXIgZ3JhbSBidWxrIHNlZGltZW50LCB3aXRoIHZhbHVlcyBiZWxvdyB0aGUgZGV0ZWN0YWJsZSBsaW1pdCAoMTBeMyBnLTEpIGluZGljYXRlZCBieSBY4oCZcy4gR2FzIGh5ZHJhdGUgbm9kdWxlcyBzZXZlcmFsIGNtIGluIGRpYW1ldGVyIChBKSB3ZXJlIHJlY292ZXJlZCBpbiBhIHJlcGxpY2F0ZSBjb3JlIGF0IDQwLTUwIGNtIGJlbG93IHNlYWZsb29yLgoKQW5kIGZyb20gY29yZXMgd2hlcmUgbWV0aGFuZSBmbHV4IGlzIGluY3JlYXNpbmcgKEdDMTA0NSBhbmQgR0MxMDgxKToKCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTUuNSwgZmlnLndpZHRoPTExLCBmaWcuYWxpZ249ImNlbnRlciJ9CmdyaWQ6OmdyaWQuZHJhdyhmaWd1cmUzKQpgYGAKCkZpZ3VyZSAzLiBHZW9jaGVtaWNhbCwgbnVtZXJpY2FsLCBtaWNyb2JpYWwgY29tbXVuaXR5LCBhbmQgZ2VuZSBhYnVuZGFuY2UgZGF0YSBmcm9tIHR3byBzaXRlcyBzaG93aW5nIG5vbi1zdGVhZHktc3RhdGUgc3VsZmF0ZS1tZXRoYW5lIGR5bmFtaWNzLiBHcmF2aXR5IGNvcmVzIEdDMTA0NSBhbmQgR0MxMDgxIGFyZSBsb2NhdGVkIGF0IEdITXMgMyBhbmQgNCwgcmVzcGVjdGl2ZWx5LiBTdWxmYXRlLW1ldGhhbmUgdHJhbnNpdGlvbiBkZXB0aHMgYXJlIGluZGljYXRlZCBieSBkYXNoZWQgbGluZXMuIChBKSBzaG93cyBwb3Jld2F0ZXIgc3VsZmF0ZSwgc3VsZmlkZSwgYW5kIGFsa2FsaW5pdHksIGFuZCAoQikgdGhlIHRlbXBvcmFsIHByb2dyZXNzaW9uIG9mIG1vZGVsZWQgQU9NIHJhdGVzIGZyb20gMTAgeWVhcnMgYWdvIHRvIHVwIHRvIDIgeWVhcnMgaW50byB0aGUgZnV0dXJlLiAoQykgaW5kaWNhdGVzIHBlcmNlbnQgYWJ1bmRhbmNlcyBvZiBkb21pbmFudCBiYWN0ZXJpYWwgYW5kIGFyY2hhZWFsIGNsYXNzZXMsIGRvbWluYW50IGFuYWVyb2JpYyBtZXRoYW5vdHJvcGhpYyBhcmNoYWVhbCAoQU5NRSkgZmFtaWxlcywgYW5kIHN1bGZhdGUtcmVkdWNpbmcgYmFjdGVyaWFsIChTUkIpIGdlbmVyYS4gKEQpIHNob3dzIGNvcHkgbnVtYmVycyBvZiBtY3JBIGFuZCBkc3JBQiBnZW5lcyBwZXIgZ3JhbSBidWxrIHNlZGltZW50LgoKCkFuZCBmcm9tIGZvdXIgc3RlYWR5LXN0YXRlIGNvcmVzOgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9OSwgZmlnLndpZHRoPTExLCBmaWcuYWxpZ249ImNlbnRlciJ9CmdyaWQ6OmdyaWQuZHJhdyhmaWd1cmU0KQpgYGAKCkZpZ3VyZSA0LiBHZW9jaGVtaWNhbCwgbnVtZXJpY2FsLCBtaWNyb2JpYWwgY29tbXVuaXR5LCBhbmQgZ2VuZSBhYnVuZGFuY2UgZGF0YSBmcm9tIGZvdXIgc2l0ZXMgc2hvd2luZyBzdGVhZHktc3RhdGUgc3VsZmF0ZS1tZXRoYW5lIGR5bmFtaWNzLiBHQzEwNjjigJMxMDcwIGFyZSBmcm9tIEdITTUsIGFuZCByZWZlcmVuY2UgY29yZSBHQzEwNDggaXMgbG9jYXRlZCB0byB0aGUgd2VzdCBvZiBHSE01LiBTdWxmYXRlLW1ldGhhbmUgdHJhbnNpdGlvbiBkZXB0aHMgYXJlIGluZGljYXRlZCBieSBkYXNoZWQgbGluZXMuIChBKSBzaG93cyBwb3Jld2F0ZXIgc3VsZmF0ZSwgc3VsZmlkZSwgYW5kIGFsa2FsaW5pdHksIGFuZCAoQikgcHJlc2VudC1kYXkgbW9kZWxlZCBBT00gcmF0ZXMuIChDKSBpbmRpY2F0ZXMgcGVyY2VudCBhYnVuZGFuY2VzIG9mIGRvbWluYW50IGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY2xhc3NlcywgZG9taW5hbnQgYW5hZXJvYmljIG1ldGhhbm90cm9waGljIGFyY2hhZWFsIChBTk1FKSBmYW1pbGVzLCBhbmQgc3VsZmF0ZS1yZWR1Y2luZyBiYWN0ZXJpYWwgKFNSQikgZ2VuZXJhLihEKSBzaG93cyBjb3B5IG51bWJlcnMgb2YgbWNyQSBhbmQgZHNyQUIgZ2VuZXMgcGVyIGdyYW0gYnVsayBzZWRpbWVudCwgd2l0aCB2YWx1ZXMgYmVsb3cgdGhlIGRldGVjdGFibGUgbGltaXQgKDEwMyBnLTEpIGluZGljYXRlZCBieSBY4oCZcy4gTWFjcm9zY29waWMgdHJhbnNsdWNlbnQtdG8teWVsbG93IGJpb2ZpbG1zLCBzaG93biBhcyB5ZWxsb3cgc3ltYm9scyBpbiBwYW5lbCAoQSksIHdlcmUgb2JzZXJ2ZWQgYXQgU01UIGRlcHRocyBpbiB0d28gY29yZXMgKHN5bWJvbCBzaXplIG5vdCB0byBzY2FsZSB3aXRoIGRlcHRoIGF4aXMpLgoKIyMjIERpZmZlcmVudGlhbGx5IGFidW5kYW50IEFTVnMgYWNyb3NzIHpvbmVzIGFuZCBtZXRoYW5lIGZsdXggdHlwZXM6CgpUaGlzIHBsb3Qgc2hvd3MgZGlmZmVyZW50aWFsbHkgYWJ1bmRhbnQgQVNWcywgcmVwbGFjaW5nIHRoZSBvbGQgZmlndXJlIFMyLiBFYWNoIHBvaW50IHJlcHJlc2VudHMgYSBoaWdobHktYWJ1bmRhbnQgQVNWIChvbmUgb2YgdGhlIHRvcCAxMDAwIGluIHRoZSBkYXRhc2V0KSB3aG9zZSByZWxhdGl2ZSBhYnVuZGFuY2UgaXMgZGlmZmVyZW50IGJldHdlZW4gc3RlYWR5LXN0YXRlIG9yIG5vbi1zdGVhZHktc3RhdGUgY29tbXVuaXRpZXMuIFRoaXMgaXMgZnVydGhlciBzdWJzZXQgaW50byBhYm92ZS1TTVQgYW5kIGJlbG93LVNNVCBjb21tdW5pdGllcyAoQSBhbmQgQiB2ZXJ0aWNhbCBwYW5lbHMpLiBJIHNlZSBzaW1pbGFyIHBhdHRlcm5zIGFzIGluIHRoZSBwcmV2aW91cyBmaWd1cmUgUzIuIEJ1dCBpbnRlcmVzdGluZ2x5LCB0aGUgQU5NRS0xYSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBwYW5lbCBCIGlzIG5vdCBhY3R1YWxseSBvbmUgb2YgdGhlIHR3byBtYWpvciBBTk1FLTFhIEFTVnMgaW4gdGhlIGRhdGFzZXQtLSB0aG9zZSB0d28gYXJlIG5vdCBkaWZmZXJlbnRpYWxseSBhYnVuZGFudC4gU28gdGhpcyBtaWdodCBoaW50IGF0IEFTVi1zY2FsZSBuaWNoZSBkaWZmZXJlbmNlcyBpbiB0aGlzIHN1YnBvcHVsYXRpb24gdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgdW5kZXRlY3RlZCB3aXRoIE9UVXMuIAoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9OC41LCBmaWcud2lkdGg9OH0KZ3JpZDo6Z3JpZC5kcmF3KGRpZmZhYnVuZCkKYGBgCgpGaWd1cmUgNS4gQ29tbW9uIEFTVnMgKHRoZSB0b3AgMTAwMCBpbiB0aGlzIGRhdGFzZXQpIHRoYXQgYXJlIGRpZmZlcmVudGlhbGx5IGFidW5kYW50IGJldHdlZW4gc2l0ZXMgd2hlcmUgbWV0aGFuZSBmbHV4IGlzIGluY3JlYXNpbmcgKG5vbi1zdGVhZHktc3RhdGUpIGFuZCBzaXRlcyBhdCBnZW9jaGVtaWNhbCBzdGVhZHktc3RhdGUsIGZhY2V0dGVkIGhvcml6b250YWxseSBvbiB0aGUgcmlnaHQgYnkgY29tbXVuaXRpZXMgZnJvbSBhYm92ZSAoQSkgb3IgYmVsb3cgKEIpIHRoZSBzdWxmYXRlLW1ldGhhbmUgdHJhbnNpdGlvbiB6b25lLiBBbHBoYT0wLjAxLCB3aXRoIGEgQmVuamFtaW5pLUhvY2hiZXJnIGNvcnJlY3Rpb24gZm9yIG11bHRpcGxlIGNvbXBhcmlzb25zLiBQYW5lbCAoQSkgc2hvd3MgQVNWcyBjb2xvcmVkIGJ5IENsYXNzLCB3aXRoIE1ldGhhbm9taWNyb2JpYSBhbmQgRGVsdGFwcm90ZW9iYWN0ZXJpYSBzaG93biBpbiBmdXJ0aGVyIGRldGFpbCBpbiBwYW5lbHMgKEIpIGFuZCAoQykgYW5kIGNvbG9yZWQgYnkgT3JkZXIgYW5kIEZhbWlseSwgcmVzcGVjdGl2ZWx5LgoKIyMjIEFscGhhLWRpdmVyc2l0eSAoZGl2ZXJzaXR5IHdpdGhpbiBjb21tdW5pdGllcykKCkV2ZW4gdGhvdWdoIGNvbW11bml0eSByaWNobmVzcyBoYXMgY2hhbmdlZCBiZWNhdXNlIG9mIHByb2Nlc3NpbmcgQVNWcyBpbnN0ZWFkIG9mIE9UVXMsIHRoZSBhbHBoYS1kaXZlcnNpdHkgcGF0dGVybnMgKGZhY3RvcmluZyBpbiBldmVubmVzcykgYXJlIHVuY2hhbmdlZC4gQ29tbXVuaXRpZXMgZnJvbSBub24tc3RlYWR5LXN0YXRlIHNpdGVzIHNob3cgZGVjcmVhc2luZyBhbHBoYSBkaXZlcnNpdHkgYWNyb3NzIHRoZSBwZWFrIEFPTSByYXRlLCB3aGVyZWFzIHN0ZWFkeS1zdGF0ZSBjb21tdW5pdGllcyBhcmUgdW5jaGFuZ2VkLgpgYGB7ciwgZWNobz1GQUxTRX0KZ3JpZDo6Z3JpZC5kcmF3KGZpZ3VyZTUpICMgZmlndXJlNSBpcyBub3cgZmlndXJlIDYKYGBgCgpGaWd1cmUgNi4gTWljcm9iaWFsIGNvbW11bml0eSBkaXZlcnNpdHkgcGF0dGVybnMgYWNyb3NzIHBlYWsgbW9kZWxlZCBBT00gZGVwdGhzLiBTaGFubm9uIGRpdmVyc2l0eSBpbmRpY2VzIG9mIG1pY3JvYmlhbCBjb21tdW5pdGllcyBmb3IgaW5kaXZpZHVhbCBzYW1wbGVzIHBsb3R0ZWQgYnkgdGhlaXIgZGlzdGFuY2UgYWJvdmUgKHBvc2l0aXZlKSBvciBiZWxvdyAobmVnYXRpdmUpIHRoZSBkZXB0aHMgY29ycmVzcG9uZGluZyB0byBwcmVzZW50LWRheSBtYXhpbXVtIEFPTSByYXRlcyBhY3Jvc3MgYWxsIGNvcmVzLiBDb3JlcyBhcmUgZGl2aWRlZCBieSBwYW5lbCBiYXNlZCBvbiB3aGV0aGVyIHN1bGZhdGUtbWV0aGFuZSBkeW5hbWljcyBhcmUgKEEpIG5vbi1zdGVhZHktc3RhdGUsIG9yIChCKSBhdCBzdGVhZHktc3RhdGUuIERvdHRlZCBob3Jpem9udGFsIGxpbmVzIHNob3cgdGhlIGRpc3RhbmNlIGludGVydmFsIGNvcnJlc3BvbmRpbmcgdG8gc2FtcGxlcyBmcm9tIG5vbi1zdGVhZHktc3RhdGUgY29yZXMuIE11bHRpcGxlIFIyIGFuZCBzbG9wZSBwLXZhbHVlcyBhcmUgc2hvd24gZm9yIGxpbmVhciByZWdyZXNzaW9ucyBvZiBwb2ludHMgd2l0aGluIHRoZXNlIGludGVydmFscy4gVGhlc2UgYW5hbHlzZXMgc3VnZ2VzdCBtaWNyb2JpYWwgY29tbXVuaXR5IGRpdmVyc2l0eSBjb3JyZWxhdGVzIGJldHRlciB3aXRoIHRoZSBwZWFrIEFPTSBkZXB0aCBpbiBub24tc3RlYWR5LXN0YXRlIGNvcmVzIHRoYW4gaW4gdGhlIG90aGVycy4KCgojIyMgQmV0YS1kaXZlcnNpdHkgKGRpdmVyc2l0eSBiZXR3ZWVuIGNvbW11bml0aWVzKQoKSSBkaWRuJ3QgZ2V0IGFueSBvcmRpbmF0aW9ucyB0byB3b3JrIG9uIHRoaXMgZGF0YXNldCBiZWZvcmUsIGJ1dCBJJ3ZlIHRyaWVkIHNldmVyYWwgb24gdGhlIHJlY2VudCBkYXRhc2V0IHVzaW5nIHNldmVyYWwgY29tYmluYXRpb25zIG9mIHRyYW5zZm9ybWF0aW9ucywgZGlzdGFuY2UgbWV0cmljcywgYW5kIG9yZGluYXRpb25zLiBOTURTIHdpdGggdW53ZWlnaHRlZCBVbmlmcmFjIHdvcmtzIHdlbGwgaGVyZS4gUGFpcndpc2UgY29tcGFyaXNvbnMgYmV0d2VlbiBhbGwgY29yZSB0eXBlcyAoc3RlYWR5LXN0YXRlIG9yIG5vbi1zdGVhZHktc3RhdGUpIGFuZCByZWRveCB6b25lcyBzaG93cyB0aGF0IGV2ZXJ5IGNvbW11bml0eSBjYXRlZ29yeSBpcyBkaWZmZXJlbnQuIChUaGlzIGlzIG5vdCB3aGF0IEkgZm91bmQgZWFybGllciwgd2hlcmUgYmVsb3ctU01UIGNvbW11bml0aWVzIHdlcmUgbm90IGRpZmZlcmVudCBiZXR3ZWVuIG5vbi1zdGVhZHktc3RhdGUgYW5kIHN0ZWFkeS1zdGF0ZSBzaXRlcy4uLiBhbmQgbm9ubGluZWFyIFNSIHpvbmUgY29tbXVuaXRpZXMgd2VyZSBub3QgZGlmZmVyZW50IGZyb20gYmVsb3ctU01UIG9uZXMgaW4gbm9uLXN0ZWFkeS1zdGF0ZSBzaXRlcykuIFRoaXMgb3JkaW5hdGlvbiBiZWxvdyAoYW5kIG1lbnRpb25pbmcgYSBmZXcgdC10ZXN0cyBpbiB0aGUgdGV4dCkgd2lsbCByZXBsYWNlIHRoZSBvbGQgRmlndXJlIDYuCgpgYGB7ciwgZWNobz1GQUxTRX0Kbm1kc29yZDEKYGBgCgpGaWd1cmUgNy4gTm9ubWV0cmljIE11bHRpZGltZW5zaW9uYWwgU2NhbGluZyAoTk1EUykgb3JkaW5hdGlvbiBvZiB1bndlaWdodGVkIFVuaWZyYWMgZGlzdGFuY2VzIGJldHdlZW4gYWxsIGNvbW11bml0aWVzLiBEaXN0YW5jZXMgd2VyZSBjYWxjdWxhdGVkIGJhc2VkIG9uIGEgdmFyaWFuY2Utc3RhYmlsaXppbmcgbG9nIHRyYW5zZm9ybWF0aW9uIHdpdGggbmVnYXRpdmUgdmFsdWVzIHJlbW92ZWQuIFBhaXJ3aXNlIHQtdGVzdHMgdmVyaWZ5IHRoYXQgY29tbXVuaXR5IHN0cnVjdHVyZSBpcyBkaXN0aW5jdCBhbW9uZyBhbGwgcmVkb3ggem9uZXMuIFRoaXMgcmVtYWlucyB0cnVlIGV2ZW4gd2hlbiBzZXBhcmF0aW5nIGNvbW11bml0aWVzIGZyb20gc3RlYWR5LXN0YXRlIGFuZCBub24tc3RlYWR5LXN0YXRlIHNpdGVzLCBhbmQgd2hlbiBjb21wYXJpbmcgYW5hbG9nb3VzIHJlZG94IHpvbmVzIGJldHdlZW4gc3RlYWR5LXN0YXRlIGFuZCBub24tc3RlYWR5LXN0YXRlIHNpdGVzICh3aWxsIGRpc2N1c3MgdGhpcyBtb3JlIGluIHRoZSB0ZXh0KS4KCgojIyMgQ29uY2VwdHVhbCBmaWd1cmUgaXMgdW5jaGFuZ2VkOgoKIVtjYXB0aW9uXShmaWd1cmVzL2ZsdXguY29uY2VwdHVhbC5maWd1cmUucG5nKQoKRmlndXJlIDguIENvbmNlcHR1YWwgZGVwaWN0aW9uIG9mIG1pY3JvYmlhbCBjb21tdW5pdHkgY2hhbmdlcyBjb25jdXJyZW50IHdpdGggZXZvbHZpbmcgbWV0aGFuZSBzdXBwbHkgYXQgU3RvcmZqb3JkcmVubmEgR0hNcy4gTWV0aGFuZSBhbmQgc3VsZmF0ZSBwcm9maWxlcyBhcmUgc2hvd24gaW4gZ3JheSBhbmQgYmx1ZSBsaW5lcywgcmVzcGVjdGl2ZWx5LCB3aXRoIG1pY3JvYmlhbCBjb21tdW5pdHkgY2hhbmdlcyBpbmRpY2F0ZWQgYnkgYmxvd3VwIGNpcmNsZXMuIEFOTUUgYW5kIFNSQiByZXByZXNlbnQgcmVkIGFuZCBncmVlbiBjaXJjbGVzLCB3aXRoIGFsbCBvdGhlciBiYWN0ZXJpYSBhbmQgYXJjaGFlYSBpbiBncmF5IChjZWxsIHNoYXBlcyByZXByZXNlbnQgZGl2ZXJzaXR5IG9mIG90aGVyIHRheGEpLiAoQSkgR2FzIGh5ZHJhdGVzIGF0IHRoZSB1cHBlciBsaW1pdCBvZiBzdGFiaWxpdHkgZGlzc29jaWF0ZSBhbmQgYXF1ZW91cyBtZXRoYW5lIGRpZmZ1c2VzIHVwd2FyZHMsIHN0aW11bGF0aW5nIEFPTSBhbmQgZHJhd2luZyBkb3duIHN1bGZhdGUgd2hpbGUgc29tZSBvZiB0aGUgbWV0aGFuZSBlc2NhcGVzIGFzIGJ1YmJsZXMgb2YgZnJlZSBnYXMuIChCKSBPbmNlIHN1bGZhdGUgZHJvcHMgYmVsb3cgMSBtTSwgbWljcm9iaWFsIGRpdmVyc2l0eSwgcmF0ZXMgb2YgQU9NLCBhbmQgdGhlIHRoaWNrbmVzcyBvZiB0aGUgQU9NIHpvbmUgZGVjcmVhc2UuIE5vbi1zdGVhZHktc3RhdGUgY29uZGl0aW9ucyBhcmUgc3RpbGwgb2JzZXJ2ZWQgaW4gc3VsZmF0ZS1tZXRoYW5lIGR5bmFtaWNzLiAoQykgQnkgdGhlIHRpbWUgYSBzdGVhZHktc3RhdGUgc3VsZmF0ZSBwcm9maWxlIGlzIHJlYWNoZWQsIG1ldGhhbmUgZmx1eCBpcyBubyBsb25nZXIgaW5jcmVhc2luZy4gR2FzIHNlZXBhZ2UgaGFzIHN0b3BwZWQsIG1pY3JvYmlhbCBkaXZlcnNpdHkgcmVib3VuZHMsIGFuZCB0aGUgQU9NIHpvbmUgaXMgY29uc3RyYWluZWQgdG8gYSB0aGlubmVyIGRlcHRoLCBidXQgcGVhayBBT00gcmF0ZXMgYXJlIGhpZ2hlciBhbmQgY2FuIHN1cHBvcnQgdGhlIGdyb3d0aCBvZiBtYWNyb3Njb3BpYyBiaW9maWxtcy4KCgojIyMgU3VwcGxlbWVudGFsIEZpZ3VyZXMKClRoZXNlIHJlbWFpbiB1bmNoYW5nZWQuCgpgYGB7ciwgZWNobz1GQUxTRX0KZ3JpZDo6Z3JpZC5kcmF3KGNvcmVmbHV4LmZpZykKYGBgCkZpZ3VyZSBTMS4gUHJlc2VudC1kYXkgdXB3YXJkcyBtZXRoYW5lIGZsdXggaW50ZWdyYXRlZCBmcm9tIG1vZGVsZWQgQU9NIHJhdGVzIGF0IGFsbCBjb3Jlcy4gQmVjYXVzZSBzdWxmYXRlIGRpZCBub3QgZHJvcCB0byAwIG1NIGluIFBDMTAyOSwgdGhlIGFtb3VudCBzaG93biBoZXJlIHJlcHJlc2VudHMgYSBsb3dlciBib3VuZGFyeS4KCmBgYHtyLCBlY2hvPUZBTFNFfQpyYXRlbWNyQS5wbG90CmBgYAoKRmlndXJlIFMyLiBSZWdyZXNzaW9uIG9mIG1jckEgZ2VuZSBjb3B5IG51bWJlcnMgKHBlciBncmFtIGJ1bGsgc2VkaW1lbnQpIHRvIG1vZGVsZWQgQU9NIHJhdGVzIHNob3dzIGEgbGluZWFyIHJlbGF0aW9uc2hpcCBhY3Jvc3Mgc2FtcGxlcyBmcm9tIGFsbCBjb3JlcyAobG9nLWxvZyB0cmFuc2Zvcm1hdGlvbikuIFNhbXBsZXMgdGhhdCBkaWQgbm90IGNvbnRhaW4gZGV0ZWN0YWJsZSBtY3JBIHdlcmUgbm90IGluY2x1ZGVkLiAKCmBgYHtyLCBlY2hvPUZBTFNFfQpzc2pwLnBsb3QKYGBgCgpGaWd1cmUgUzMuIEVtcGlyaWNhbGx5LW1lYXN1cmVkIHN1bGZhdGUgcG9yZXdhdGVyIHByb2ZpbGVzIGZyb20gY29yZXMgdGFrZW4gZnJvbSBzdGVhZHktc3RhdGUgYXJlYXMsIHNob3duIHdpdGggbW9kZWxlZCBzdWxmYXRlIHByb2ZpbGVzIGFzc3VtaW5nIGEgbm9uLXN0ZWFkeSBzdGF0ZSBzY2VuYXJpbyB3aGVyZSBtZXRoYW5lIGZsdXggaXMgaW5jcmVhc2luZy4gVGhlIGRpc2NyZXBhbmNpZXMgaW4gdGhlIHNoYXBlcyBvZiB0aGVzZSB0d28gcHJvZmlsZXMgZm9yIHRoZXNlIGZvdXIgY29yZXMgaXMgZXZpZGVuY2UgdGhhdCB0aGV5IGFyZSBub3QgZXhwZXJpZW5jaW5nIGEgcmVjZW50IGluY3JlYXNlIGluIG1ldGhhbmUgZmx1eCwgYW5kIGFyZSB0aHVzIGNoYXJhY3Rlcml6ZWQgYXMgc3RlYWR5LXN0YXRlLgoKIyMjIFN1cHBsZW1lbnRhbCBUYWJsZXMKClRoZXNlIGFyZSBhbHNvIHVuY2hhbmdlZC4KCmBgYHtyLCBlY2hvPUZBTFNFfQpjb3JlaW5mbwpgYGAKClRhYmxlIFMxLiBMYXRpdHVkZSwgbG9uZ2l0dWRlLCB3YXRlciBkZXB0aCwgY29yZSByZWNvdmVyeSwgYW5kIHN1bGZhdGUtbWV0aGFuZSB0cmFuc2l0aW9uIGRlcHRoIG9mIGFsbCBjb3JlcyBhbmFseXplZCBpbiB0aGlzIHN0dWR5LgoKCmBgYHtyLCBlY2hvPUZBTFNFfQppbmMuY29yZQpgYGAKClRhYmxlIFMyLiBJbmNyZWFzZXMgaW4gbWV0aGFuZSBmbHV4IG92ZXIgdGhlIHBhc3QgdHdvIGRlY2FkZXMgZm9yIGNvcmVzIEdDMTA0NSBhbmQgR0MxMDgxIGFuZCBjb3JyZXNwb25kaW5nIGRlcHRocyBvZiBtb2RlbGVkIHBlYWsgQU9NIHJhdGVzLiBGbHV4ZXMgYXJlIGludGVncmF0ZWQgZnJvbSBBT00gcmF0ZSBkYXRhLCB1c2luZyBjZWxsIHdpZHRocyBvZiAyLjUgY20uIChQZWFrIEFPTSBkZXB0aHMgYWxzbyBhdCAyLjUgY20gcmVzb2x1dGlvbiku